/*
 * $Id: dictClient.h 9ce65bed8ef4 2012/08/26 02:14:51 pgurumur $
 * Copyright (c) 2012 Prabhu Gurumurthy <pgurumur@gmail.com>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *

 * __version__  = "$Revision: 9ce65bed8ef4 $"
 * __author__   = "$Author: pgurumur $"
 * __modified__ = "$Date: 2012-08-26 02:14:51Z $"
 */
#ifndef __DICT_CLIENT_H_
#define __DICT_CLIENT_H_

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/utsname.h>

#include <arpa/inet.h>
#include <netinet/in.h>

#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include <QString>

namespace QtDict {

   const u_int16_t DictPort = 2628;
   const u_int32_t RecvBuffer = BUFSIZ;
   const time_t PollTimeout = 6000; /* 6 second poll timeout */
   const QString DictClientVersion = "0.1";

   class dictClient {
      public:
         dictClient (const QString &, const u_int16_t &, const int &);
         dictClient (const dictClient &);
         dictClient &operator= (const dictClient &);
         ~dictClient ();

         void dictConnect (void);
         int readSocket (QString &);
         int writeSocket (const QString &);

      private:
         QString __dictServer;
         struct sockaddr_in __sock4;
         struct sockaddr_in6 __sock6;

         void __setBlock (void);
         void __setUnblock (void);

         int __af;
         int __sock;
         int __conn;
         u_int16_t __port;
   };
}

#endif
